﻿using System;

namespace csharp学习循环语句__2021._10._20
{
   
    class Program
    {
        static void Main(string[] args)
        {
            #region do while循环讲解
            #region 第一题 明明跳舞（do while循环）
            //明天豆豆就要登台演出了，老师说需要把明天演出的歌曲唱一遍，如果老师满意
            //豆豆就可以回去了，否则就需要再练习一遍，直到老师满意为止（y/n）

            //bool answer = true;

            //do
            //{
            //    Console.WriteLine("豆豆演出了明天的歌曲");
            //    Console.WriteLine("你作为老师满意嘛？（y/n）");
            //    char input = Console.ReadKey(true).KeyChar;//判定输入法
            //    if (input == 'y')
            //    {
            //        answer = true;
            //    }
            //    else 
            //    {
            //        answer = false;
            //    }

            //} while (!answer);
            //因为这里是相反的，如果老师答案是true，那么就为真，就会直接进入循环，所以这里要相反     
            //和while的区别，是先不管while（）的条件，先执行一遍循环体的内容，第一遍执行完后
            //再去循环while条件

            #endregion

            #region 第二题 用户输入密码
            //要求用户输入用户名和密码，只要不是admin、888888就一致提示用户名或密码，请重新输入

            //do {
            //    Console.WriteLine("请输入用户名");
            //    string userName=Console.ReadLine();
            //    Console.WriteLine("请输入密码");
            //    string passWorld = Console.ReadLine();

            //    if (userName == "admin" && passWorld == "888888")
            //    {
            //        Console.WriteLine("登录成功");
            //        break;//是正确的就直接跳出循环
            //    }
            //    else 
            //    {
            //        Console.WriteLine("登录失败");
            //    }
            //}
            //while (true);//直接进入循环

            #endregion

            #region 第三题 不断提示请输入你的姓名，输入q结束

            //do
            //{
            //    Console.WriteLine("请输入你的姓名");
            //    string userName = Console.ReadLine();
            //    if (userName == "q")
            //    {
            //        break;
            //    }
            //}
            //while (true);

            #endregion
            #endregion

            #region for循环

            #region 输出1到100之间的整数
            //for(int i=1;i<=100;i++)
            //{
            //    Console.WriteLine(i);
            //}
            //Console.ReadKey();
            #endregion

            #region 输出100到1之间的整数
            //for(int i=100;i>0;i--)
            //{
            //  Console.WriteLine(i);
            //}
            //Console.ReadKey();
            #endregion

            #region 找出100-999之间的水仙花数
            //for (int i = 100; i < 1000; i++) 
            //{
            //    int one = i % 10;//个位数
            //    int two = i / 10 % 10;//十位数
            //    int three= i /100;//百位数
            //    if (one * one * one + two * two * two + three * three * three == i)
            //    {
            //        Console.WriteLine(i);
            //    }

            //}
            #endregion

            #region 输出小星星
            //除了第一行是第十行是是个星星，其余行都是首和尾打印*

            //for (int i = 0; i <10; i++)
            //{
            //    for (int j = 0; j < 10; j++)
            //    {
            //        if (i == 0 || i == 9)
            //        {
            //            Console.Write("*");
            //        }
            //        else 
            //        {
            //            if (j == 0 || j == 9)
            //            {
            //                Console.Write("*");//第一个和最后一个是*
            //            }
            //            else 
            //            {
            //                Console.Write(" ");//其余是空格
            //            }
            //        }
            //    }
            //    Console.WriteLine();//换行
            //}
            #endregion

            #region 在控制台上输出如下10*10的三角形方阵
            //for (int i = 1; i <=10; i++)
            //{

            //    for (int j = 0; j <i; j++)//输出一行几个
            //    {
            //        Console.Write("*");
            //    }
            //    Console.WriteLine();
            //}
            #endregion

            #region 九九乘法表
            //for (int i = 1; i <= 9; i++)
            //{
            //    for(int j=1;j<=i;j++)
            //    {
            //        Console.Write("{0}*{1}={2}\t",i,j,i*j);//\t是制表符
            //    }
            //    Console.WriteLine();
            //}

            #endregion

            #endregion

            #region 复杂数据类型（基本数据类型的组合）
            //一个角色的血量，攻击力，防御力，等级等 都是基本数据
            //枚举
            //枚举是一个自定义数据类型（这个类型是c#中没有的）
            /*
             * 1.使用枚举前先定义
             * 
             * enum 枚举名
             * {
             *   枚举项,
             *   枚举项,
             *   枚举项
             * }
             * 
             * 2.枚类型默认可以和int类型转化（枚举类型本质是int类型）
             * 3.默认情况下，第一个枚举默认值是0
             * 4.可以描述事物的状态，或者有限的结果
             */

            //waterState water = waterState.固态;//调用，可以直接赋值
            //可以用switch

            //第2点怎么使用？
            //类型转化

            //        water = (waterState)1;//强制类型转化为相同类型

            //        switch (water)
            //        {
            //            case waterState.固态:
            //                Console.WriteLine("冰");
            //                break;
            //            case waterState.气态:
            //                Console.WriteLine("水");
            //                break;
            //            case waterState.液态:
            //                Console.WriteLine("云");
            //                break;
            //        }
            #endregion

            #region 枚举练习 第一题QQ

            //QQta myQQSta = QQta.Qme;
            //Console.WriteLine("1.Qme,2.Online,3.Offline,4.Leave,5.Busy");
            //string input = Console.ReadLine();
            ////监听输入
            //switch (input) 
            //{
            //    case "1":
            //        myQQSta = QQta.Qme;//(QQsta)0——————强制类型转换
            //        break;
            //    case "2":
            //        myQQSta = QQta.Online;
            //        break;
            //    case "3":
            //        myQQSta = QQta.Offline;
            //        break;
            //    case "4":
            //        myQQSta = QQta.Leave;
            //        break;
            //    case "5":
            //        myQQSta = QQta.Busy;
            //        break;
            //    default:
            //        break;
            //}
            //Console.WriteLine("你QQ现在的状态为"+myQQSta);
            #endregion

            #region 枚举练习 第二题 定义一个游戏状态
            //GameSta PlayerSta = GameSta.MenuSta;
            //Console.WriteLine("请选择游戏角色状态：1.MenuSta,2.PlaySta,3.ExitSta");
            //string input = Console.ReadLine();
            //switch (input)
            //{
            //    case "1":
            //        PlayerSta = GameSta.MenuSta;
            //        break;
            //    case "2":
            //        PlayerSta = GameSta.PlaySta;
            //        break;
            //    case "3":
            //        PlayerSta = GameSta.ExitSta;
            //        break;
            //    default:
            //        break;
            //}
            //Console.WriteLine("你的角色游戏状态为"+PlayerSta);
            #endregion

            #region 枚举类型转换
            /*
             * 1.和int类型进行转换----显示转换
             * 2.枚举可以转化成字符串————枚举变量名.Tostring();
             * 3.字符串转枚举
             * （myEnum）Enum.Parse(typeof(要转化的枚举类型)),"要转化的字符串");
             * 
             * eg1.
             * myGame=(GameSta)Enum.Parse(typeof(GameSta),"ExitSta");
             */


            //字符串转枚举
            //GameSta myGame = GameSta.MenuSta;
            //myGame = (GameSta)Enum.Parse(typeof(GameSta),"ExitSta");//类型转换
            //Console.WriteLine(myGame);

            #endregion


            #region 结构体
            //结构体 描述事物的结构关系
            //可以包含多个基本数据类型，也可以包含其他复杂数据类型
            //不可以包含自身类型

            //描述一个圆，但不能用圆来解释圆

            //因为是复杂数据类型，是自定义的
            //所以在使用前，先定义这个数据类型
            /*
             
              struct 结构名
              {
                 成员;
                 成员;
                 成员;
              }
             */
            //定义了一个结构体的模板，通过这个模板可以创建结构体的对象
            //访问修饰符，放在变量或者类名，方法名前面，用来修饰它的可访问性

            //public 关键字 代表公开，谁都可以访问
            //private 关键字 代表私有的，只有自己本身可以访问
            //protected 关键字 代表继承的 只有自己和自己的子类才可以访问

            //结构体在使用时，需要实例化一个对象

            //描述一个哥布林的血量，怎么访问
            #endregion

            #region 结构体使用

            //通过模板创造一个哥布林对象
            /*  Gablin xiaohua = new Gablin();*///内从中开辟了一个空间放哥布林——————构造函数--实例化

            //实例化 通过模板创造出对应的对象——————
            /*
             * 结构体名  变量名（对象名）= new 结构体名();
             * 
             * 对象名.成员
             * 
             */

            //访问哥布林的属性

            //xiaohua.hp = 100;
            //xiaohua.atk = 50;
            //xiaohua.atk = 25;
            //Gablin.speed = 100;
            //Console.WriteLine("哥布林小花的血量为："+xiaohua.hp);


            //补充知识 static：静态
            //如果你的成员被静态修饰了，只能通过你的结构体名.成员名调用


            #endregion

            #region 静态和非静态的调用区别
            //静态：类型名称.静态成员调用
            //非静态：对象名.成员调用
            #endregion
        }
    }
    #region 枚举water
    //enum waterState //写在类外面

    //    //如果这里是玩家的状态
    //    //比如中毒，流血，眩晕，灼烧等，就可以是回合制游戏了
    //    //可以描述boss状态等。。。
    //    //可以用枚举定义动画状态机
    //{
    //    固态,
    //    液态,
    //    气态
    //}
    #endregion

    #region QQ枚举
    //enum QQta 
    //{
    //    Qme,
    //    Online,
    //    Offline,
    //    Leave,
    //    Busy
    //}
    #endregion

    #region 游戏状态枚举
    //enum GameSta
    //{ 
    //    MenuSta,
    //    PlaySta,
    //    ExitSta
    //}
    #endregion

    #region 创建一个哥布林结构体
    //struct Gablin
    //{
    //    public int hp;//代表哥布林血量
    //    public int atk;//攻击力属性
    //    public int def;//防御力属性
    //    public static int speed;//访问直接Gablin.speed


    //如果你的成员被静态static修饰了，只能通过结构体名.成员名调用
    //}
    #endregion

}
